{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2.5 范数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 向量范数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### $L^p$ 范数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通常我们用范数（`norm`）来衡量向量，向量的 $L_p$ 范数定义为：\n",
    "\n",
    "$$\n",
    "\\|\\mathbf x\\|_{p} = \\left(\\sum_{i} |x_i|^p \\right)^{\\frac{1}{p}}, p \\in \\mathbb R, p \\geq 1\n",
    "$$\n",
    "\n",
    "除了 $L_p$ 范数，范数还可以有很多定义方式，事实上，任何将向量映射为实数的函数 $f(\\mathbf x)$ 只要满足以下条件，都是合法的范数：\n",
    "\n",
    "- 非负性：$f(\\mathbf x) \\geq 0$，且 $f(\\mathbf x) = 0 \\Rightarrow \\mathbf{x = 0}$\n",
    "- 三角不等式：$f(\\mathbf{x+y}) \\leq f(\\mathbf x) + f(\\mathbf y)$\n",
    "- 数乘：$\\forall \\alpha \\in \\mathbb R, f(\\alpha\\mathbf x) = |\\alpha|f(\\mathbf x)$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### $L^2$ 范数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$L^2$ 范数，即通常所说的欧几里得范数（`Euclidean norm`），是向量 $\\mathbf x$ 到坐标原点的欧几里得距离。因为它用的太广泛，所以我们通常省略其下标 2，将其记为 $\\|\\mathbf x\\|$。\n",
    "\n",
    "有时候也用 $L^2$ 范数的平方来衡量向量：$\\bf x^\\top x$。事实上，$L^2$ 范数的平方在计算上更为便利，例如它的对 $\\mathbf x$ 梯度的各个分量只依赖于 $\\mathbf x$ 的对应的各个分量，而 $L^2$ 范数对 $\\mathbf x$ 梯度的各个分量要依赖于整个 $\\mathbf x$ 向量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 其他范数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$L^2$ 范数并不一定适用于所有的情况，它在原点附近的增长就十分缓慢，因此不适用于需要区别 0 和非常小但是非 0 值的情况。在这种情况下，$L_1$ 范数就是一个比较好的选择，它在所有方向上的增长速率都是一样的，定义为：\n",
    "\n",
    "$$\\|\\mathbf x\\|_1 = \\sum_{i} |x_i|$$\n",
    "\n",
    "它经常使用在需要区分 0 和非零元素的情形中。\n",
    "\n",
    "有时候我们需要衡量向量中非零元素的个数，有些人将其称为“$L^0$ 范数”，但是这并不严谨，因为**它并不是一个范数**（不满足三角不等式和数乘）。$L^1$ 范数可以作为它的一个替代。\n",
    "\n",
    "另一个常使用的范数是 $L^{\\infty}$ 范数，它在数学上是向量元素绝对值的最大值，因此也被叫做 `max norm`：\n",
    "\n",
    "$$\n",
    "\\|\\mathbf x\\|_{\\infty} = \\max_i |x_i|\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 内积的范数形式"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "内积可以写成范数的形式，其中 $\\theta$ 是两个向量的夹角：\n",
    "\n",
    "$$\n",
    "\\mathbf{x^\\top y} = \\mathbf{\\|x\\|\\|y\\|} \\cos \\theta\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 矩阵范数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有时候我们想衡量一个矩阵，机器学习中通常使用的是 `F` 范数（`Frobenius norm`），其定义为：\n",
    "\n",
    "$$\n",
    "\\|\\mathbf A\\|_F = \\sqrt{\\sum_{i,j} A_{i,j}^2}\n",
    "$$\n",
    "\n",
    "或者叫做矩阵的 $L^2$ 范数。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
